# coding = utf-8
from bs4 import BeautifulSoup

import requests
import csv
import bs4
import time
from datetime import datetime
import mysql.connector

import json
import os
import sys
import io
import xlrd
from xlrd import xldate_as_tuple

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

'''
澳大利亚牛胴体FOB出厂价格
澳大利亚肉类与畜牧业协会牛胴体价格网址：
https://www.mla.com.au/prices-markets/
https://www.mla.com.au/api/priceandmarketblock/getindicatordata?speciesType=Cattle
单位为 澳元/100千克

'''


# 创建链接数据库
config_168 = {'host': '127.0.0.1',  # 默认127.0.0.1
          'user': 'root', 'password': 'Tnq39/*riqJcC', 'port': 3306,  # 默认即为3306
          'database': 'ccii_redesign', 'charset': 'utf8','auth_plugin':'mysql_native_password'  # 默认即为utf8
          }

config1 = {'host': 'rm-2zefd6473rz062234.mysql.rds.aliyuncs.com',  # 默认127.0.0.1
          'user': 'prod_ccii', 'password': 'cI1546_wodesecerts', 'port': 3306,  # 默认即为3306
          'database': 'ccii_prod', 'charset': 'utf8', 'auth_plugin':'mysql_native_password'  # 默认即为utf8
          }

config = {'host': 'rm-2zefd6473rz062234.mysql.rds.aliyuncs.com',  # 默认127.0.0.1
          'user': 'prod_python', 'password': '939_58J6kAW)P&^', 'port': 3306,  # 默认即为3306
          'database': 'ccii_prod', 'charset': 'utf8'  # 默认即为utf8
          }


# 查询数据库当天已存在数据列表
def find_name_List(price_date):
    cnn = ''
    try:
        cnn = mysql.connector.connect(**config)  # connect方法加载config的配置进行数据库的连接，完成后用一个变量进行接收
    except mysql.connector.Error as e:
        print('数据库链接失败！', str(e))
    else:  # try没有异常的时候才会执行
        print("连接数据库sucessfully!")

    # 插入数据库
    cursor = cnn.cursor(buffered=True)  # 获取插入的标记位
    try:

        stmt = 'select country_en from alarm_intl_sheep_price  where date_format(price_date, "%Y-%m-%d") = %s '
        cursor.execute(stmt, [price_date])
        data = cursor.fetchall()
        # cnn.commit()
        # print("查询数据成功！")

    except mysql.connector.Error as e:
        print('查询数据报错！', str(e))
    finally:  # 无论如何都会执行下面的语句
        cursor.close()  # 关闭标记位
        cnn.close()  # 关闭数据库链接

    return data

# 处理成sql插入数据
def handle_sql_data(data):
    # data[0] 日期  data[1]  价格 美元/100磅
    db_names = find_name_List(data[0])
    db_country_list = list()
    for item in db_names:
        db_country_list.append(list(item)[0])

    print(db_country_list)

    if 'AUS' in db_country_list:
        print("{} -->在数据库已存在，移除该条记录不保存。".format(item[0]))
        # data 只有一条记录
        return
    else:
        print("不存在--执行保存")

    rate = get_rate(data[0], "AUD")
    # 汇率2
    data.append(rate)
    # 人民币/千克
    fob_price = format(float(data[1]) / 100 * float(rate), ".2f")

    # CIF价格（元/KG）=FOB出厂价格(元/KG)+海运费（2000*7.1/25000  元/KG）+海运保险费（FOB出厂价格*0.05% 元/KG）
    cif_price = format(float(fob_price) + float(1000 * 7.1 / 25000) + float(fob_price) * 0.0005, ".2f")
    # cif_price 3
    data.append(cif_price)
    # 换算fob_price 4
    data.append(fob_price)
    # 国家英文 5
    data.append("AUS")
    # 国家中文 6
    data.append("澳大利亚")
    # 币种 7
    data.append("AUD")
    # 单位 8
    data.append("澳元/100千克")
    print(data)

    return data


# return ['日期', '价格']
def get_page(c_url):
    rs_data = []
    resp = requests.get(c_url)
    # print(data)
    rs = BeautifulSoup(resp.content, "lxml")

    divs = rs.find_all("div")

    # 日期  13 Nov '20
    date_value = divs[2].string
    price_date = time.strftime('%Y-%m-%d', time.strptime(date_value, "%d %b \'%y"))
    print(price_date)
    # 823.5 NC
    price_str = divs[5].text
    price_text = price_str.replace("NC", "").replace(" ", "").replace("\n", "")
    prices = price_text.split("-")
    # 澳元/100Kg
    # price_kg = format(float(prices[0])/100, ".3f")
    # print("澳元/kg=" + price_kg)

    rs_data.append(price_date)
    rs_data.append(prices[0])

    return rs_data



'''
主程序
'''
def main(reqUrl):
    print("开始爬取数据" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    data_item = get_page(reqUrl)
    if data_item:
        price_data = handle_sql_data(data_item)
    else:
        print("未抓取到页面数据")
        return

    # 保存到数据库
    if price_data :
        save(price_data)
    print("爬取数据完成！" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))


# 查询数据库得到汇率
def get_rate(priceDate, currencyType):
    cnn = ''
    rate = 0
    try:
        cnn = mysql.connector.connect(**config)  # connect方法加载config的配置进行数据库的连接，完成后用一个变量进行接收
    except mysql.connector.Error as e:
        print('数据库链接失败！', str(e))
    else:  # try没有异常的时候才会执行
        print("sucessfully!")

    # 插入数据库
    cursor = cnn.cursor(buffered=True)  # 获取插入的标记位
    try:

        # 第三种：可以一次插入多条，效率比一条条插高,用的方法是executemany 猪牛羊 1 2 3
        stmt = "select rate_value from alarm_rate_cny where worm_date like \"%" + priceDate + "%\"" + " and rate_en_name = \'"  + (currencyType + "CNY\'")
        # print(stmt)
        # for item in data:
        #     print(item)
        cursor.execute(stmt)
        rate = cursor.fetchone()[0]
        cnn.commit()
        print(rate)
        print("查询数据成功！")

    except mysql.connector.Error as e:
        print('查询数据报错！', str(e))
    finally:  # 无论如何都会执行下面的语句
        cursor.close()  # 关闭标记位
        cnn.close()  # 关闭数据库链接

    return rate



# 保存到数据库
def save(data):
    cnn = ''
    try:
        cnn = mysql.connector.connect(**config)  # connect方法加载config的配置进行数据库的连接，完成后用一个变量进行接收
    except mysql.connector.Error as e:
        print('数据库链接失败！', str(e))
    else:  # try没有异常的时候才会执行
        print("sucessfully!")

    # 插入数据库
    cursor = cnn.cursor(buffered=True)  # 获取插入的标记位
    try:

        # 第三种：可以一次插入多条，效率比一条条插高,用的方法是executemany 猪牛羊 1 2 3
        stmt = 'insert into alarm_intl_sheep_price(name, price_date, price, rate, price_cif, price_fob, country_en, country_cn, currency_type, unit, create_date, del_flag) ' \
               'values ("' + str('羊胴体') + '", %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW(), 0)'
        # for item in data:
        #     print(item)
        # cursor.execute(stmt, item)
        cursor.execute(stmt, data)
        cnn.commit()
        print("插入数据成功！")

    except mysql.connector.Error as e:
        print('插入数据报错！', str(e))
    finally:  # 无论如何都会执行下面的语句
        cursor.close()  # 关闭标记位
        cnn.close()  # 关闭数据库链接


# 数据链接页面
# url_cattle = "https://www.mla.com.au/api/priceandmarketblock/getindicatordata?speciesType=Cattle"
url_sheep = "https://www.mla.com.au/api/priceandmarketblock/getindicatordata?speciesType=Sheep"


if __name__ == '__main__':
    main(url_sheep)








